توکن امضا دیجیتال

امضا دیجیتال

رمزنگاری مبتنی بر RSA

محرمانگي يکي از خدمات اصلي زيرساخت کليد عمومي است. محرمانگي به معناي خصوصي ماندن ،در این قسمت به بیان تکنیک های رمزنگاری مبتنی بر RSA که یک سیستم رمز کلید عمومی است که هم خدمات رمزنگاری و هم خدمات امضا دیجیتال را ارائه می کند، می پردازیم.
کارکرد این سیستم شامل دو بخش است: بخش اول تنظیمات و بخش دوم عملیات.
تنظیمات سیستم رمز RSA به این صورت است:
دو عدد اول بزرگ p و q را انتخاب می کنید و حاصلضرب آنها را به صورت n=p.q محاسبه می نمایید. از این به بعد به n پیمانه گفته می شود. عدد e را طوری انتخاب کنید که گوچکتر از n و نسبت به (p-1)(q-1) اول باشد به این معنا که e و (p-1)(q-1) هیچ مقسوم علیه مشترکی به جز یک نداشته باشند. عدد دیگری مانند d طوری بیابید که عبارت (ed-1) بر (p-1)(q-1) بخش پذیر باشد. به e و d به ترتیب نماهای عمومی و خصوصی گفته می شود. کلید عمومی را زوج (n,e) و کلید خصوصی را زوج (n,d) تشکیل می دهند. عوامل اول p و q را می توان از بین برد و می توان آنها را به همراه کلید خصوصی نگهداری کرد.
عملیات:
فرض کنید که علی می خواهد پیام m را برای حامد رمزگذاری و ارسال نماید. برای اینکار عبارت c را به صورت c=m^e به پیمانه n محاسبه می کند که در این روابط n و e کلید عمومی حامد است و c را برای حامد می فرستد. حامد برای رمزگشایی پیام، عبارت m=c^d به پیمانه n را محاسبه خواهد کرد. رابطه بین e و d به وی اطمینان خواهد داد که آنچه به دست آروده همان پیام m است. از آنجا که تنها حامد d را می داند فقط او می توناد این پیام را رمزگشایی نماید.

امضا دیجیتال RSA

تصديق هويت به معني است که از ادعاي شخص در مورد هويتش اطمينان حاصل شود. معمولاً تصديق هويت به يکي از چهارمجدداً فرض کنید علی می خواهد پیام m را برای حامد اراسل کند طوری که حامد مطمئن شود این پیام درست بوده، از طرف علی است و پس از ارسال از جانب علی، تغییر نکرده است. علی برای این منظور یک امضا دیجیتال s به صورت s=m^d به پیمانه n می سازد که در این رابطه n و d کلید خصوصی علی است. پس از این مرحله m و s را برای حامد ارسال میکند. حامد با دریافت زوج مذکور اقدام به بررسی امضا پیام می نماید. برای اینکار ابتدا عبارت m^'=s^e به پیمانه n را محاسبه کرده و آن را با m مقایسه می کند. در صورت برقراری تساوی m=m^'، امضا پیام تایید و صحت موارد گفته شده مشخص می شود.
همچنان که مشاهده شد هم عملیات رمزنگاری و هم عملیات تصدیق بدون به اشتراک گذاری کلید خصوصی انجام شد: هر نفر با استفاده از کلید عمومی طرف مقابل و یا کلید خصوصی خود عملیات مورد نظر را انجام می دهد. هرکس می تواند یک پیام رمز شده ارسال و یا یک پیام امضا شده را بررسی نماید. اما تنها دارنده کلید خصوصی می تواند رمزگشایی و یا امضا پیام را انجام دهد.

تامین امنیت در RSA

يکپارچگي به معني اطمينان از دست‌ نخوردگي است: داده ذخيره يا ارسال شده, تغيير نکرده باشد. قطعاً اينبا داشتن کلید عمومی (n,e)، به دست آوردن کلید خصوصی d کار بسیار مشکلی است. با این وجود اگر کسی بتواند n را به p و q تجزیه نماید خواهد توانست d را به دست آورد. از این رو امنیت سیستم رمز RSA مبتنی بر این فرضیه است که تجزیه n کار مشکلی است. پیدا کردن یک راه ساده برای تجزیه اعداد بزرگ، RSA را خواهد شکست(امنیت آن از بین خواهد رفت).

سرعت الگوریتم RSA

هر فرآیند یا عملیات RSA اعم از رمزگذاری، رمزگشایی، امضا و یا تایید امضا اساساً یک نمای پیمانه ای است و با دنباله ای از ضرب های پیمانه ای به انجام می رسد. در کاربردهای عملی مرسوم است که یک نمای عمومی کوچک برای کلید عمومی انتخاب می کنند. در واقع همه گروه های کاربران می توانند از یک نمای عمومی یکسان استفاده کنند در حالی هر کدام از یک پیمانه متفاوت بهره می برند.(هنگامی که نمای عمومی ثابت است محدودیت هایی در مورد عوامل اول پیمانه ها وجود دارد) این امر رمزگذاری را سریع تر از رمزگشایی و تایید امضا را سریع تر از امضا می کند. با الگوریتم های مرسوم نمای پیمانه ای که در پیاده سازی الگوریتم RSA مورد استفاده قرار می گیرد عملیات کلید عمومی o(k^2) گام، عملیات کلید خصوصی o(k^3) گام و عملیات تولید کلید o(k^4) گام به طول خواهد انجامید که k تعداد بیت های پیمانه را نشان می دهد. تکنیک های ضرب سریع مانند روش های مبتنی بر تبدیل سری فوریه به گامهای کمتری نیاز دارند. هرچند به خاطر پیچیدگی های نرم افزاری آنها و این واقعیت که ممکن است آنها برای طول کلید یکسان کندتر از الگوریتم های دیگر عمل کنند در عمل کمتر از الگوریتم های دیگر مورد استفاده قرار گیرند. سرعت و کارایی بسیاری از پیاده سازی های سخت افزاری و نرم افزاری الگوریتم RSA به سرعت در حال افزایش است.
در مقام مقایسه الگوریتم DES و سایر رمزهای بلوکی رسیع تر از RSA عمل می کنند. الگوریتم DES در پیاده سازی نرم افزاری 100 برابر و بین 1000 تا 10000 برابر بسته به نوع پیاده سازی سخت افزاری سریع تر از RSA عمل می کند. احتمالا در سال های آتی پیاده سازی های RSA به خاطر تقاضای زیادی که وجود دارد این شکاف را قدری باریک تر خواهند کرد. اما رمزهای بوکی نیز به همان اندازه سریع تر خواهند شد.

شکستن الگوریتم RSA

تفاسیر متفاوت چندی در مورد شکستم سیستم RSA وجود دارد. خسارت بار ترین کار برای یک مهاجم این است که از روی یک کلید عمومی، کلید خصوصی متناظر آن را پیدا کند. این کار او را قادر می سازد که هم همه پیام های قبلی رمز شده با کلید عمومی مذکور را بخواند و هم جعل امضا نماید. واضح ترین راه برای انجام چنین حمله ای تجزیه عمومی n به عوامل اول آن یعنی p و q است. از روی این دو مقدار و e یا همان نمای عمومی، مهاجم به سادگی می تواند نمای خصوصی d را پیدا کند. قسمت سخت این فرآیند تجزیه n است و امنیت RSA به این بستگی دارد که تجزیه مورد نظر کار مشکل و سختی باشد. در واقع به دست آوردن کلید خصوصی معادل تجزیه پیمانه است شما می توانید از d برای تجزیه n استفاده کنید همانطور که می توانید از تجزیه n برای یافتن d بهره مند شوید. باید به این نکته دقت کرد که به شرط استفاده از طول کلید مناسب، پیشرفت های سخت افزاری به تنهایی نخواهد توانست سیستم رمز RSA را تضعیف نماید. در واقع پیشرفت های سخت افزاری باید امنیت سیستم رمز را افزایش دهند.
راه دیگر شکست RSA، یافتن تکنیکی برای محاسبه eامین ریشه به پیمانه n است. با توجه به عبارت c=m^e به پیمانه n، eامین ریشه c به پیمانه n همان پیام m است. این حمله به فرد امکان بازیابی متن های رمز شده و جعل امضا حتی بدون داشتن یا دانستن کلید خصوصی را می دهد. این حمله به این عنوان که معادل حمله تجزیه است شناخته نمی شود. هیچ یک از روشهای عمومی که تا کنون شناخته شده اند RSA را به این صورت نمی شکنند. با این وجود در حالت خاص و با فرض اینکه چند پیام مرتبط با یک نمای کوچک و مشابه رمز شده باشند ممکن است امکان بازیابی پیام ها وجود داشته باشد. حملاتی که در بالا توضیح داده شد تنها راههای شکست RSA هستند به نحوی که با داشتن یک کلید خاص کلیه پیام های رمز شده قابل بازیافت باشند. با این حال روشهای دیگری نیز وجود دارد که هدف آنها بازیابی پیام های واحد است و به شرط موفقیت مهاجم قادر نخواهد بود دیگر پیام های رمز شده با آن کلید را بازگشایی نماید. افرادی هم تلاش کرده اند که تنها بخش هایی از یک پیام را رمز گشایی کنند.
ساده ترین حمله از نوع بازگشایی پیام واحد، حمله متن اصلی تخمینی است. حمله از این قرار است: مهاجم یک متن رمز در اختیار دارد. حدس میزند که متن اصلی به عنوان مثال این بوده است "حمله صبحدم". سپس ایم متن را با کلید عمومی گیرنده رمز می کند و از مقایسه نتیجه با متن رمز در اختیار به این نتیجه می رسد که حدس وی درست بوده یا خیر. افزودن بعضی بیت های تصادفی به پیام می تواند این حمله را بی اثر نماید. یک حمله دیگر از همین نوع زمانی می تواند اتفاق بیفتد که فردی پیام واحد m را برای سه نفر ارسال کند که هر سه نفر دارای نمای عمومی یکسان e=3 باشند. مهاجمی که از این موضوع اطلاع دارد و سه پیام مورد نظر را می بیند(در اختیار دارد) قادر است m را بازگشایی نماید. این حمله و راههای مقابله با آن توسط هاستاد تشریح شده است. خوشبختانه این حمله نیز با اضافه کردن بعضی بیت های تصادفی قبل از هر بار رمزگذاری قابل شکست است. حملات متن رمز منتخب برای رمزگشایی (و نقطه مقابل آن از نوع متن اصلی منتخب برای جعل امضا) از این نوع نیز وجود دارد که در آنها مهاجم متن رمزی را ایجاد و سعی می کند متن اصلی آن را مشاهده کند. شاید از این طریق که یک کاربر قانونی را فریفته و او یک پیام جعلی را برای وی رمز گشایی نماید. ناگفته پیداست که این نوع حملات حمله شکست RSA محسوب نمی شوند.

طول کلید در سیستم رمز RSA

نوعاً در الگوریتم RSA طول کلید به طول پیمانه برمی گردد. دو عدد اولی که پیمانه n را می سازند باید طول نسبتا یکسانی داشته باشند. این کار تجزیه n را نسبت به حالتی که یکی از آنها خیلی کوچکتر از دیگری است مشکل تر می نماید. اگر دو عدد اول خیلی نزدیک به هم باشند یا اختلاف آنها به یک مقدار از پیش تعیین شده خیلی نزدیک باشد در این صورت یک خطر امنیتی بالقوه وجود دارد اما احتمال اینکه دو عدد اولی که به صورت تصادفی انتخاب می شوند اینقدر به هم نزدیک باشند قابل صرفنظر کردن است. بهترین طول کلید یا پیمانه به میزان امنیت مورد نیاز فرد بستگی دارد. پیمانه های بزرگتر امنیت یشتر به همراه دارند ولی در عوض عملیات الگوریتم کندتر انجام می شود. برای انتخاب طول پیمانه باید دو نکته را مد نظر قرار داد: اول اینکه ارزش اطلاعاتی که باید حفاظت شود چقدر است و این اطلاعات تا کی باید مورد حفاظت باشند و دوم اینکه تهدیدات بالقوه ای که ممکن است وجود داشته باشند از چه قدرتی برخوردارند.
آزمایشگاه RSA طول کلید 1024 را برای مصارف صنفی و 2048 بیت را برای کلیدهای بسیار ارزشمند مانند زوج کلید مربوط به یک مرکز صدور گواهی ریشه پیشنهاد می کند. بسیاری از استانداردهای اخیر حداقل طول 1024 بیت را برای استفاده های حقیقی و تجاری توصیه می کنند. البته اطلاعاتی که از ارزش کمتری برخوردارند را می توان با کلیدهای کوتاهتر مانند 768 بیت نیز رمزگذاری نمود که این طول همچنان در ورای دسترسی الگوریتم های شکست قرار دارد. در عین حال Lenstra و Verheul مدلی برای تخمین سطوح امنیت بر اساس طول کلید های مختلف اراده داده اند که می توان آن را نیز در نظرگرفت. نکته دیگری که باید به ان دقت شود این است که معمولا طول عمر هر کلید به شرط آنکه اتفاق خاصی برای آن نیفتد و خطر و حمله خاصی آن را تهدید ننماید دو سال در نظر گرفته می شود و بعد از این بازه باید کلید دیگری تولید کرده و مورد استفاده قرار داد.
همچنانکه اقلیدس بیش از دو هزار سال پیش ثابت کرد بی نهایت عدد اول وجود دارد. با این وجود چون الگوریتم رمز RSA با یک طول کلید ثابت پیاده سازی و بکارگیری می شود در عمل تعداد اعداد اولی که برای انتخاب در اختیار یک کاربر قرار دارند متناهی و محدود می باشد. هرچند این عدد متناهی است اما به اندازه کافی بزرگ است. قضیه اعداد اول بیان می کند که تعداد اعداد اول کوچکتر یا مساوی n به سمت n/ln n میل می کند. بنابراین تعداد اعداد اول با طول 512 بیت یا کمتر تقریبا 〖10〗^150 خواهد بود. این عدد از تعداد کل اتمهای موجود در دنیایی که ما می شناسیم بیشتر است.

استفاده از الگوریتم RSA برای محرمانگی

الگوریتم RSA در عمل، اغلب همراه با یک سیستم رمز کلید خصوصی(تصادفی) مانند DES به کارگیری می شود تا یک پیام را به وسیله یک پاکت دیجیتال RSA رمزگذاری نماید. فرض کنید علی می خواهد یک پیام رمز شده برای حامد بفرستد. علی برای این کار ابتدا پیام را با استفاده از DES رمزگذاری می کند. کلید مورد استفاده در DES در اینجا به صورت تصادفی انتخاب می شود. سپس علی به جستجوی کلید عمومی حامد می پردازد و با استفاده از آن کلید DES را رمزگذاری می نماید. در این مرحله پیام رمز شده با DES و کلید رمز شده DES به وسیله RSA به همراه یکدیگر پاکت دیجیتال RSA را تشکیل داده برای حامد ارسال می شوند. با دریافت این پاکت حامد با استفاده از کلید خصوصی خود، کلید DES را رمزگشایی می کند و سپس با استفاده از آن پیام خود را رمز گشایی می نماید. این کار باعث می شود که بتوان مزیت سرعت زیاد DES را با سادگی مدیریت کلید RSA همراه با هم به کار گرفت.

استفاده از الگوریتم RSA برای احراز هویت و امضا دیجیتال

سیستم رمز RSA می تواند برای احراز هویت یا شناسایی دیگر افراد یا شخصیت ها مورد استفاده قرار گیرد. دلیل این امر هم اختصاص یک کلید خصوصی به هر فرد است که هیچ کس دیگری از آن اطلاع یا به آن دسترسی ندارد. این مسئله امکان شناسایی قطعی و منحصر به فرد را فراهم می کند. فرض کنید علی می خواهد یک پیام امضا شده برای حامد بفرستد. برای این کار یک تابع hash را روی پیام به کار میگیرد و چکیده پیام ساخته و به عنوان "اثر انگشت دیجیتال" پیام شناخته می شود. سپس چکیده را با کلید خصوصی خودش رمزگذاری کرده به عنوان امضا دیجیتال همراه با پیام ارسال می کند. حامد با دریافت پیام و امضا آن، امضا را با کلید عمومی علی رمزگشایی می کند تا چکیده پیام را بازیابی کند و از سوی دیگر با استفاده از همان تابع hash مورد استفاده علی از روی پیام چکیده دیگری ایجاد می نماید. حال دو چکیده ای که در اختیار دارد با بکدیگر مقایسه می کند. اگر این دو مقدار دقیقا با هم برابر باشند امضا با موفقیت تایید شده و حامد مطمئن می شود که پیام حقیقتا از طرف علی برای وی ارسال شده است. در صورتی که این دو مقدار با هم برابر نباشند یا پیام از طرف کسی غیر از علی ارسال شده و یا پس از امضا شدن به نحوی تغییر کرده است وامضا رد می شود. هر کسی که پیام را می خواند می تواند امضا آن را تایید کند. این روال شرایطی را که علی نمی خواهد کسی غیر از حامد پیامش را بخواند در بر نمی گیرد.
در عمل معمولا نمای الگوریتم RSA خیلی کوچکتر از نمای خصوصی آن است. بنابراین تایید امضا بسیار سریعتر از فرآیند امضا صورت می گیرد واین خاصیت مطلوبی به نظر می رسد زیرا یک پیام تنها یکبار و توسط یک نفر امضا می شود در حالی که احتمالا چندین نفر باید آن امضا را تایید نمایند.
با استفاده از مثال و توضیحات فوق، علی برای اینکه پیامش تنها توسط حامد قابل خواندن باشد ابتدا آن را امضا کرده سپس با استفاده از کلید عمومی حامد رمزگذاری می نماید. حامد پس از دریافت پیام نیاز دارد با استفاده از کلید خصوصی خود پیام را رمزگشایی نموده و امضا را بر اساس پیام بازیابی شده و با استفاده از کلید عمومی علی بررسی و تایید نماید. متقابلا چنانچه لازم باشد شخص ثالث میانی بدون بازگشایی پیام جامعیت آن را بررسی و تایید کند می توان به جای اینکه از متن اصلی پیام استفاده کرد چکیده پیام را از روی پیام رمز شده به دست آورد.

توکن K3